import axios from 'axios';
import store from '@/store';
import { logout } from '@/store/actions';
import { customHistory } from './history';
import { message } from 'antd';

// 创建 axios 实例
const http = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
  // baseURL: 'http://toutiao.itheima.net/v1_0',
  // timeout: 1,
});

// 配置 axios 实例的请求拦截器
http.interceptors.request.use((config) => {
  // console.log('axios 请求配置', config);

  // 只有登录接口不需要添加token
  if (!config.url.startsWith('/authorizations')) {
    config.headers.Authorization = `Bearer ${store.getState().login}`;
  }

  // 配置完成后把最新的 config 返回给 axios
  return config;
});

// 配置 axios 实例的响应拦截器
http.interceptors.response.use(undefined, (error) => {
  // 错误处理
  console.dir(error);
  // 通用错误处理
  if (!error.response) {
    message.error('网络错误');
    return Promise.reject(error);
  }

  // 处理token认证失败 401 错误
  if (error.response.status === 401) {
    message.error('token 认证失败', 1.5, () => {
      // 删除旧的token, 使用登出的 action
      store.dispatch(logout());
      // 如果用户再次刷新则会自动回到登录页面
      // 不用用户刷新，自动跳转
      customHistory.push('/login', {
        from: customHistory.location.pathname,
      });
    });

    // 处理完毕后返回给 axios 做后续处理
    return Promise.reject(error);
  }
});

export { http };
